print("访问限制##################################################start")


# 属性的名称前加上两个下划线__，在Python中，实例的变量名如果以__开头，就变成了一个私有变量（private），只有内部可以访问
class Student(object):
    def setName(self, name):
        self.__name = name

    def setAge(self, age):
        self.__age = age

    def getName(self):
        return self.__name

    def getAge(self):
        return self.__age


student = Student()
print(student)
# print(student.name)
# print(student.__name)
# print(student.age)
# print(student.__age)
print(student.setName("wx"))
print(student.setAge(18))
print(student.getName())
print(student.getAge())
# 小结
# 变量名类似__xxx__的，也就是以双下划线开头，并且以双下划线结尾的，是特殊变量，
# 特殊变量是可以直接访问的，不是private变量，所以，不能用__name__、__score__这样的变量名
# 双下划线开头的实例变量是不是一定不能从外部访问呢？
# 其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name，所以，
# 仍然可以通过_Student__name来访问__name变量
# 总的来说就是，Python本身没有任何机制阻止你干坏事，一切全靠自觉
print(student._Student__name)
print("访问限制##################################################end\n")
